/*
 * Copyright (C) 2011-2012 5ifilm.net. All Rights Reserved.
 * $Id: BaseDao.java 2012-08-02 wangjunneil@gmail.com$
 *
 */
package net.ifilm.dao;

import com.ibatis.sqlmap.client.SqlMapClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import java.util.List;
import java.util.Map;

/**
 * <code>BaseDao</code>类时数据库操作的基类，包含记本的增删改查等操作
 *
 * CreateBy: <a href="wangjunneil@gmail.com">Calvin</a>
 * CreateTime: 2013-01-15 23:01
 */
public class BaseDao extends SqlMapClientDaoSupport {

    /**
     * 注入ibatis数据库操作对象
     *
     * @param sqlMapClient ibatis数据库操作类
     */
    @Autowired
    public void setSqlMapClientOverride(SqlMapClient sqlMapClient) {
        super.setSqlMapClient(sqlMapClient);
    }

    //----------------------------------------------------------------------------------------- public method

    /**
     * 数据库插入操作
     *
     * @param statementName
     * @param object
     * @return
     */
    protected Object insert(String statementName, Object object) {
        return getSqlMapClientTemplate().insert(statementName, object);
    }

    /**
     * 数据库删除操作
     *
     * @param statementName
     * @param object
     * @return
     */
    protected Object delete(String statementName, Object object) {
        return getSqlMapClientTemplate().delete(statementName, object);
    }

    /**
     * 数据库更新操作
     *
     * @param statementName
     * @param object
     * @return
     */
    protected Object update(String statementName, Object object) {
        return getSqlMapClientTemplate().update(statementName, object);
    }

    /**
     * 查询数据库数据以列表返回
     *
     * @param statementName
     * @return
     */
    protected List<?> queryForList(String statementName) {
        return getSqlMapClientTemplate().queryForList(statementName);
    }

    /**
     * 查询数据库数据以列表返回
     *
     * @param statementName
     * @param parameterMap
     * @return
     */
    protected List queryForList(String statementName, Map<String, Object> parameterMap) {
        return getSqlMapClientTemplate().queryForList(statementName, parameterMap);
    }

    /**
     * 查询数据库数据以列表返回
     *
     * @param statementName
     * @param param
     * @return
     */
    protected List queryForList(String statementName, Object param) {
        return getSqlMapClientTemplate().queryForList(statementName, param);
    }

    /**
     * 查询数据库以单个对象返回
     *
     * @param statementName
     * @return
     */
    protected Object queryForObject(String statementName) {
        return getSqlMapClientTemplate().queryForObject(statementName);
    }

    /**
     * 查询数据库以单个对象返回
     *
     * @param statementName
     * @param parameterMap
     * @return
     */
    protected Object queryForObject(String statementName, Map<String, Object> parameterMap) {
        return getSqlMapClientTemplate().queryForObject(statementName, parameterMap);
    }

    /**
     * 查询数据库以单个对象返回
     *
     * @param statementName
     * @param param
     * @return
     */
    protected Object queryForObject(String statementName, Object param) {
        return getSqlMapClientTemplate().queryForObject(statementName, param);
    }

    /**
     * 查询数据库纪录以Map返回
     *
     * @param statement
     * @param parameter
     * @param keyProperty
     * @return
     */
    protected Map queryForMap(String statement, Map<String, Object> parameter, String keyProperty) {
        return getSqlMapClientTemplate().queryForMap(statement, parameter, keyProperty);
    }

} ///:~
